package com.demo.spring.enable.schedule;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
public class Student {

	private static final Logger logger = LoggerFactory.getLogger(Student.class);

	/**
     * second（秒）, minute（分）, hour（时）, day of month（日）, month（月）, day of week（周几）.
     * 例子：
     *  【0 0/5 14,18 * * ?】 每天14点整，和18点整，每隔5分钟执行一次
     *  【0 15 10 ? * 1-6】 每个月的周一至周六10:15分执行一次
     *  【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次
     *  【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次
     *  【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间，每个整点都执行一次；
     */
    @Scheduled(cron = "0/1 * * * * MON-SAT")
	public void say() {
    	logger.info(Thread.currentThread().getName());
    	try {
    		// 实际上还是阻塞的
			Thread.sleep(5000);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

    @Bean
    public TaskScheduler asyncExecutor() {
    	// 延迟任务必须用ThreadPoolTaskScheduler
    	ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();
		taskExecutor.setPoolSize(10);
		taskExecutor.initialize();
		return taskExecutor;
	}

}
